package cn.jbolt.ai.app.service;

import cn.jbolt.ai.app.vo.AccessCheckData;
import cn.jbolt.ai.app.vo.AiAppLinkSubmitVO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.jbolt.ai.app.entity.AiApp;
import cn.jbolt.util.Result;
import com.jboltai.capability.message.AIMessage;

import java.util.List;

public interface AiAppService extends IService<AiApp> {

    /**
     * 根据ID获取应用信息
     *
     * @param id 应用ID
     * @return 应用信息
     */
    Result<AiApp> getAppById(Long id);
    /**
     * 根据sn获取应用信息
     *
     * @param sn 应用sn
     * @return 应用信息
     */
    Result getAppBySn(String sn);

    /**
     * 根据ID获取只获取app对象
     *
     * @param id 应用ID
     * @return 应用信息
     */
    Result getOnlyAppById(Long id);

    /**
     * 获取所有应用信息
     *
     * @return 所有应用列表
     */
    Result listByPage(Integer page, Integer pageSize, Boolean enable, String keywords);

    /**
     * 添加新的应用
     *
     * @param app 新的应用对象
     * @return 是否添加成功
     */
    Result add(AiApp app);

    /**
     * 更新应用信息
     *
     * @param app 需要更新的应用对象
     * @return 是否更新成功
     */
    Result update(AiApp app);

    /**
     * 删除应用
     *
     * @param id 应用ID
     * @return 是否删除成功
     */
    Result del(Long id);

    /**
     * 切换状态
     *
     * @param id
     * @return
     */
    Result toggleEnable(Long id);

    /**
     * 更新app的知识库的挂载数量
     *
     * @param appId
     * @param type
     * @param size
     * @return
     */
    // Result updateAppLinkCount(Long appId,String type,Integer size);


    /**
     * 开启上下文,获取前20条消息
     * limit: 传null,默认查询前20条
     *
     * @return
     */
    List<AIMessage> getSessionContextMessages(Long sessionId, Long startId, Integer limit);

    /**
     * 挂载知识库
     * @param vo
     * @return
     */
    Result submitKnowledgeBases(AiAppLinkSubmitVO vo);

    Result getKlbByAppId(Long appId);

    /**
     * 挂载functionCall
     * @param vo
     * @return
     */
    Result submitFunction(AiAppLinkSubmitVO vo);

    Result getFuncByAppId(Long appId);

    Result getAppType();
    Result checkAccessPwd(AccessCheckData data);

    Result removeKnowledgeBases(AiAppLinkSubmitVO vo);
}
